define(["Zepto", 
        "underscore", 
        "Backbone", 
        "Handlebars",  
        "text!templates/teacher/teacher.html",
        "models/ricevimentodocente",
        "models/session",
        "models/utente",
        "models/studenteappuntamentodocente",
        "collections/studenteappuntamentodocentecollection",
        "collections/corsocollection",
        "views/teacher/ricevimentoview",
        "views/teacher/coursesview",
        "views/common/menuview"
], function($, _, Backbone, Handlebars, template, Ricevimentodocente, Session,
		Utente, Studenteappuntamentodocente, StudenteappuntamentodocenteCollection,
		CorsoCollection, RicevimentoView, CoursesView, MenuView) {
	
   
	  var TeacherPage = Backbone.View.extend({
		  
	        template: Handlebars.compile(template),

	        render: function(eventName) {
	        	//alert('nome: ' + this.model.get('nome'));
	        	this.$el.html(this.template(this.model.toJSON()));
	        	
	        	// menu top
	        	this.menutop = new MenuView({
	               	el : $('#menu', this.el),
	    			model : this.model
				});
	            this.menutop.render();
	        	
	        	// Un docente potrebbe ancora non aver impostato l'orario di ricevimento
	        	if(this.model.get('ricevimento') && !Session.getAuth().isdocente) {
	        		var ricd = this.model.get('ricevimento').objectId;
		            this.ricevimentodocente = new Ricevimentodocente({objectId: ricd}); 
		            this.ricevimentodocente.fetch({
		                success: function(data) {
		                	this.ricevimento = new RicevimentoView({	    				
			                	el : $('#ricevimento', this.el),
			    				model : data
		    				});
		                	this.ricevimento.render();
							var scroll1 = new iScroll('ricevimento',
	                                  { useTransition:false,
	                                    checkDOMChanges: true,
	                                    hideScrollbar: true,
	                                    fixedScrollbar:true }
	                                );
	               		}});
	        	} else {
	        		this.$('#appointmentbutton').remove();
	        	}

	            
	            this.corsoCollection = new CorsoCollection();
				this.corsoCollection.fetch({
					query : {
						isattivo: true,
						docente: {"__type":"Pointer","className":"_User","objectId":this.model.get('objectId')}
	               	},
	               	success: function(data) {
	                	this.courses = new CoursesView({	    				
							el : $('#corsi ul', this.el),
							model : data
	    				});
	                	this.courses.render();
						var scroll2 = new iScroll('corsi',
                                  { useTransition:false,
                                    checkDOMChanges: true,
                                    hideScrollbar: true,
                                    fixedScrollbar:true }
                                );
					}});
	            return this;
	        },
	        

	        events: {
	            'click #appointmentbutton': 'getAppointment',
	            'touchstart .button': 'over',
	            'touchend .button': 'left',
	            'touchcancel .button': 'left',
	            'touchstart button': 'over',
	            'touchend button': 'left',
	            'touchcancel button': 'left',
	            'touchstart .ac-container article.selectable ul li': 'over',
	            'touchend .ac-container article.selectable ul li': 'left',
	            'touchcancel .ac-container article.selectable ul li': 'left'
	        },

	        getAppointment: function(event) {
	            //alert('getAppointment ' + this.model.get('objectId'));
	            //this.model.get('objectId');
	            var docente = new Utente( { objectId: this.model.get('objectId')});
	            // recupero id Ricevimento Docente
	            docente.fetch( {include:'ricevimento',
	            		success: function(){
	            			//alert('wday ' + docente.get('ricevimento').weekday);
	            			var wday = docente.get('ricevimento').weekday;
	            			
	            			if(wday == "Lun"){
	            				
	            				k = 0;
	            			}else if(wday == "Mar"){
	            				
	            				k = 1;
	            			}else if(wday == "Mer"){
	            				
	            				k = 2;
	            			}else if(wday == "Gio"){
	            				k = 3;
	            				
	            			}else if(wday == "Ven"){
	            				k = 4;
	            				
	            			}else{
	            				alert('error');
	            			}
	            			
	            			if(Session.getAuth()){
	        					var user = new Utente(Session.getAuth());
	        					
	        					var date = new Date();
	        					var n = date.getDay();
	        					var diff;
	        					if(n <= k){
	        						diff = k - n + 1;
	        					}else{
	        						diff = n - k + 1;
	        					}
	        					
	        					date.setDate(date.getDate() - diff);
	        					//alert('day ' + date);
	        					date.toISOString();
	        					
	        					this.studCollection = new StudenteappuntamentodocenteCollection();
	        					this.studCollection.fetch({
	        						query : {
	        							createdAt: {"$gte": {"__type": "Date", "iso": date}},
	        							//utente: {"__type":"Pointer","className":"_User","objectId":user.get('objectId')},
	        							ricevimentodocente: {"__type":"Pointer","className":"ricevimentodocente","objectId":docente.get('ricevimento').objectId}
	        		                },
	        		                include : 'ricevimentodocente',          //Include un oggetto di tipo Puntatore
	        		            
	        		                success: function(data) {
	        		                	
	        		                	if(data.length > docente.get('ricevimento').maxprenotazioni){
	        		                		alert('Non è possibile prenotare un Appuntamento con il docente; superato il limite delle prenotazioni ' + docente.get('ricevimento').maxprenotazioni);
	        		                	}else{
	        		                		if(data.length > 0){
	        		                			var giaprenotato = false;

	        		                			_.each(data.models, function(ric) {﻿
		        		                			if(ric.get('utente').objectId == user.get('objectId')){
		        		                				alert('Sei già prenotato');
		        		                				giaprenotato = true;
		        		                			}
		        		                		}, this);

	        		                			//Se esco dall'each e non ho incontrato nessun appuntamento con l'user corrente
	        		                			//vuol dire che il docente aveva altri appuntamenti ma nessuno di questi era mio
	        		                			//quindi anche in questo caso (come in quello di sotto) devo far prendere
	        		                			//l'appuntamento

	        		                			if(!giaprenotato) {
	        		                				var sta = new Studenteappuntamentodocente();
		        		                			sta.save({
		        		                				ricevimentodocente: {"__type":"Pointer","className":"ricevimentodocente","objectId":docente.get('ricevimento').objectId},
		        	        							utente: {"__type":"Pointer","className":"_User","objectId":user.get('objectId')}
		        		                            },{
		        		                            error: function(error){ alert('Error'); },
		        		                            success: function(model, resp){
		        		                                alert('Appuntamento prenotato');
		        		                            }});
	        		                			}
	        		                				
	        		                		}else{
	        		                			var sta = new Studenteappuntamentodocente();
	        		                			sta.save({
	        		                				ricevimentodocente: {"__type":"Pointer","className":"ricevimentodocente","objectId":docente.get('ricevimento').objectId},
	        	        							utente: {"__type":"Pointer","className":"_User","objectId":user.get('objectId')}
	        		                            },{
	        		                            error: function(error){ alert('Error'); },
	        		                            success: function(model, resp){
	        		                                alert('Appuntamento prenotato');
	        		                            }});
	        		                		}
	        		                	}
	        		                	
	        		               	}
	        		                
	        					});
	            			}
	            		}
	            });    
	            
	        },

	        over: function(event) {
	            $(event.currentTarget).addClass('fake-active');
	        },

	        left: function(event) {
	            $(event.currentTarget).removeClass('fake-active');
	        }

	});

    return TeacherPage;

});

